<?php
/**
*Thực hiện các chức năng liên quan đến Board
*/
class BoardsController extends AppController{
	var $name = 'Boards';
	var $uses = array('Board','UserImageBoard','Image','UserFollow','Profile','UserLike','UserComment','Categorie');
	var $helpers = array('Html','Session');
	var $components = array('Session');

	
	public function beforeFilter(){
        parent::beforeFilter();
    }

	/*chức năng:thêm Board mới
	  Author:user đã đăng nhập với id = $userId
	*/
	public function addBoard($userId = null){
		if($userId == null){
			$userId = $this->Auth->user('id');
		}
		if($this->request->is('post')){
			$this->Board->create();
			
			$this->request->data['Board']['user_id'] = $userId;
			
			if($this->Board->save($this->request->data)){
				//$this->Session->setFlash(__('Đã thêm.'));
				return $this->redirect(array('action'=>'viewInfoBoards'));
			}
			$this->Session->setFlash(__('Không thể thêm post được.'));
		}
	}


	/*
		Chức năng: xem danh sách thông tin các Board của user có id là $userId
		Author: mọi người
	*/
	public function getInfoBoards($boards = null){
		if($boards){
			for($i=0; $i<count($boards); $i++){
			$userImageBoard = $this->UserImageBoard->find('all',array(
																	'conditions'=>array(
																					'UserImageBoard.board_id'=>$boards[$i]['Board']['id']),
																	'limit'=>5));
			$boards[$i]['ImageInBoard'] = $userImageBoard;
			/*boardAction =1,edit;2,follow;3,unfollow*/
			if($boards[$i]['Board']['user_id'] == $this->Auth->user('id')){
				$boards[$i]['boardAction'] = 1;
			}else
			if($this->UserFollow->find('all',array(
										'conditions'=>array(
											'UserFollow.user_id'=>$this->Auth->user('id'),
											'UserFollow.board_id'=>$boards[$i]['Board']['id'])
										))){
				$boards[$i]['boardAction'] = 3;
			}else{
				$boards[$i]['boardAction'] = 2;
			}

			/*lay profile user cua board*/
			$user = $this->Profile->findByUser_id($boards[$i]['Board']['user_id']);
			$boards[$i]['Profile'] = $user['Profile'];
		}
		return $boards;
		}
	}

	public function viewInfoBoards(){
		
		$boards = $this->Board->find('all',array(
											'order'=>array('Board.created DESC')));
		$boards = $this->getInfoBoards($boards);
		
		$this->set('boards',$boards);
	}

	/*
		chức năng: xem thông tin của Board có id là $boardId
		Author: mọi người
	*/
	public function getInfoImages($images = null){
		if($images){
			for($i=0; $i<count($images); $i++){
				$user = $this->Profile->findByUser_id($images[$i]['UserImageBoard']['user_id']);
				$images[$i]['Profile'] = $user['Profile'];
				$likes = $this->UserLike->find('all',array(
														'conditions'=>array(
															'UserLike.user_image_board_id'=>$images[$i]['UserImageBoard']['id'])
														));
				if($likes){
					for($j=0; $j<count($likes); $j++){
						$profile = $this->Profile->findByUser_id($likes[$j]['UserLike']['user_id']);
						$profiles[] = $profile;
					}
					$images[$i]['ProfileLike'] = $profiles;
					global $profiles;
					unset($profiles);
					
				}else{
					$images[$i]['ProfileLike'] = null;
				}
				
				$like = $this->UserLike->find('count',array(
														'conditions'=>array(
															'UserLike.user_image_board_id'=>$images[$i]['UserImageBoard']['id'],
															'UserLike.user_id'=>$this->Auth->user('id'))
														));
				
				if($like > 0){
					$images[$i]['UserLike'] = true;
				}else{
					$images[$i]['UserLike'] = false;
				}



				$comments = $this->UserComment->find('all',array(
															  'conditions'=>array(
															  	'UserComment.user_image_board_id'=>$images[$i]['UserImageBoard']['id'])));
				$images[$i]['UserComment'] = count($comments);
				
				if($comments){

					
					for($j=0; $j<count($comments); $j++){
						
						$profile = $this->Profile->findByUser_id($comments[$j]['UserComment']['user_id']);
						$profiles[] = $profile;
					}
					$images[$i]['ProfileComment'] = $profiles;
					global $profiles;
					unset($profiles);
					
				}else{
					$images[$i]['ProfileComment'] = null;
				}
			}
			
			return $images;
		}
	}
	public function viewInfoBoard($boardId = null){
		$images = $this->UserImageBoard->find('all',array(
													'conditions'=>array(
														'board_id'=>$boardId)
													));
		
		
		$getImages = $this->getInfoImages($images);
		
		$board = $this->Board->findById($boardId);
		
		$this->set('images',$getImages);
		$this->set('board',$board);

	}
	 
	public function listBoardToFollow(){
		$boards = $this->Board->find('all',array(
											'conditions'=>array(
												'NOT'=>array('user_id'=>$this->Auth->user('id'))),
											'order'=>array('created DESC')
											));
		if($boards){
			$flag = false;
			for($i=0; $i<count($boards); $i++){
				$follow = $this->UserFollow->find('count',array(
													'conditions'=>array(
														'UserFollow.user_id'=>$this->Auth->user('id'),
														'UserFollow.board_id'=>$boards[$i]['Board']['id'])));
				
				if($follow == 0){
					$flag = true;
					$getBoards[] = $boards[$i];
				}
			}
			if($flag){
				$getgetBoards = $this->getInfoBoards($getBoards);
				$this->set('boards',$getgetBoards);
			}else{
				$this->set('boards',null);
			}
			
		}
	}
	/*
		Chức năng: xem danh sách các ảnh chứa trong Board có id là $boardId
		Author: mọi người
	*/
	public function viewImagesBoard($boardId = null){
		$this->set('boardId',$boardId);
		$conditions = array('UserImageBoard.board_id'=>$boardId);
		$images = $this->UserImageBoard->find('all',array('conditions'=>$conditions));
		$this->set('images',$images);
		if($images == null){
			$this->Session->setFlash(__('empty'));
		}
	}
	
	/*
		Chức năng: chỉnh sửa thông tin của Board có id là $boardId
		Author: user đã đăng nhập
	*/
	public function editInfoBoard($boardId = null){
		if(!$boardId){
			throw new Exception("Invalid Board", 1);
			
		}
		$board = $this->Board->findById($boardId);
		if(!$board){
			throw new Exception("Khong tim thay trong csdl", 1);
			
		}
		if($this->request->is(array('post', 'put'))){
			$this->Board->id = $boardId;
			if($this->Board->save($this->request->data)){
				
				return $this->redirect(array('action'=>'viewInfoBoards'));
			}
			$this->Session->serFlash('Không cập nhật được');
		}
		if(!$this->request->data){
			$this->request->data = $board;
		}
	}

	/*
		Chức năng: thêm 1 ảnh mới, sau đó chuyển sang trang xem ảnh vừa up
		Author: user đã đăng nhập
	*/

	public function upload($file = null){
		if($file['url']['name'] != NULL){ // Đã chọn file
           // Tiến hành code upload file
			
		   if($file['url']['type'] == "image/jpeg"
			|| $file['url']['type'] == "image/png"
			|| $file['url']['type'] == "image/gif"){
			  // là file ảnh
			  // Tiến hành code upload
			  if($file['url']['size'] > 1048576){
			      $this->Session->setFlash(__('File không được lớn hơn 1mb'));
			      return false;
			  }else{
			  	  
			      // file hợp lệ, tiến hành upload
			      $path = WWW_ROOT."img/"; // ảnh upload sẽ được lưu vào thư mục data
			      $tmp_name = $file['url']['tmp_name'];
			      $name = $file['url']['name'];
			      $type = $file['url']['type']; 
			      $size = $file['url']['size']; 
			      // Upload file
			      move_uploaded_file($tmp_name,$path.$name);
			     

			      return true;
			  }
			}else{
			  // không phải file ảnh
			  $this->Session->setFlash(__('Kiểu file không hợp lệ'));
			  return false;
			}
	  	}else{
           $this->Session->setFlash(__('Vui lòng chọn file'));
           return false;
      	}
      	return false;
	}

	public function addImageIntoBoard(){
		
		$boards = $this->Board->find('all',array(
												'conditions'=>array(
													'Board.user_id'=>$this->Auth->user('id'))
												));
		$categories = $this->Categorie->find('all');
		$this->set('boards',$boards);
		$this->set('categories',$categories);

		if($this->request->is('post')){
			$nameId = $this->UserImageBoard->find('first',array('order'=>array('UserImageBoard.updated DESC')));
			$this->request->data['Image']['url']['name'] = $nameId['UserImageBoard']['id'].$this->request->data['Image']['url']['name'];
			if($this->upload($this->request->data['Image'])){
				$this->request->data['Image']['url'] = $this->request->data['Image']['url']['name'];
				
				$this->Image->create();
				
				if( $this->Image->save($this->request->data) ){
					//$this->Session->setFlash(__('Đã thêm.'));
					
				}

				$image = $this->Image->find('first', array(
	        								'conditions' => array('Image.name' => $this->request->data['Image']['name'],
	        														'Image.url'=>$this->request->data['Image']['url'])
	    									));
				$this->UserImageBoard->create();
				$userImageBoard['UserImageBoard']['user_id'] = $this->Auth->user('id');
				$userImageBoard['UserImageBoard']['image_id'] = $image['Image']['id'];
				$userImageBoard['UserImageBoard']['board_id'] = $this->request->data['Image']['boardId'];
				$userImageBoard['UserImageBoard']['updated'] = $image['Image']['created'];
				$userImageBoard['UserImageBoard']['description'] = $image['Image']['description'];
				if($this->UserImageBoard->save($userImageBoard)){

					$userImageBoardId = $this->UserImageBoard->find('first', array(
														        'order' => array('UserImageBoard.id' => 'desc')
														    ));
					//chuyen sang trang xem anh
					return $this->redirect(array('controller'=>'Boards','action'=>'viewInfoBoard',$userImageBoardId['UserImageBoard']['board_id']));
				}

				$this->Session->setFlash(__('Không thể thêm post được.'));
			}			
		}
	}

	/*
		Chức năng: pin 1 ảnh có id là $imageId vào Board có id là $boardId
					- nếu ảnh này đã 
		Author: user đã đăng nhập
	*/
	public function pinImageIntoBoard($userImageBoardId = null){
		if($userImageBoardId){
			$userImageBoard = $this->UserImageBoard->findById($userImageBoardId);
			$userImageBoardNew = $userImageBoard;
			
			
			$boards = $this->Board->find('all',array(
												'conditions'=>array(
													'Board.user_id'=>$this->Auth->user('id'))
												));

			$userImageBoardNew['UserImageBoard']['board_id'] = $boards[0]['Board']['id'];
			$userImageBoardNew['UserImageBoard']['user_id'] = $this->Auth->user('id');
			$this->set('boards',$boards);
			$this->set('userImageBoard',$userImageBoardNew);
			
			if($this->request->is(array('post', 'put'))){
				$this->UserImageBoard->create();
				if($this->UserImageBoard->save($this->request->data)){//luu pin moi
					
					//echo "<script language=javascript>window.location.replace(document.referrer);</script>";
					$userImageBoard['UserImageBoard']['count_pin'] +=1;//tang pin anh cu len 1
					if($this->UserImageBoard->save($userImageBoard)){
						
						return $this->redirect(array('controller'=>'UserImageBoards','action'=>'listImages'));
					}
					
				}
				$this->Session->serFlash('Không cập nhật được');
			}
			if(!$this->request->data){
				$this->request->data = $userImageBoardNew;
			}
		}
	}

	public function listImage($boardId=null){
		$images = $this->Image->find('all');
		$this->set('images',$images);
		$this->set('boardId',$boardId);
	}
	/*
		Chức năng: xóa ảnh có id là $imageId trong Board có id là $boardId
		Author: user đã đăng nhập
	*/
	public function deleteImageInBoard($userImageBoardId = null, $boardId){
		if($userImageBoardId){
			$userLike = $this->UserLike->findByUser_image_board_id($userImageBoardId);
			if($userLike){
				$this->UserLike->delete($userLike['UserLike']['id']);
			}
			$userComment = $this->UserComment->findByUser_image_board_id($userImageBoardId);
			if($userComment){
				$this->UserComment->delete($userComment['UserComment']['id']);
			}
			if($this->UserImageBoard->delete($userImageBoardId)){
				//$this->Session->setFlash(__('Image id %s deleted', h($userImageBoardId)));
				//echo "<script language=javascript>window.location.replace(document.referrer);</script>";
				return $this->redirect(array('controller'=>'UserImageBoards','action'=>'listImages'));
			}
		}	
	}

	/*
		Chức năng: edit info của image có id là $imageId
		Author: user đã đăng nhập
	*/
	public function editImageInBoard($userImageBoardId = null){
		if(!$userImageBoardId){
			throw new Exception("Invalid Image in board", 1);
			
		}
		$userImageBoard = $this->UserImageBoard->findById($userImageBoardId);
		if(!$userImageBoard){
			throw new Exception("Khong tim thay trong csdl", 1);
			
		}
		if($this->request->is(array('post', 'put'))){
			if($this->UserImageBoard->save($this->request->data)){
				$this->Session->setFlash('Đã cập nhật');
				return $this->redirect(array('action'=>'viewImagesBoard',$userImageBoard['UserImageBoard']['board_id']));
			}
			$this->Session->serFlash('Không cập nhật được');
		}
		if(!$this->request->data){
			$this->request->data = $userImageBoard;
		}
	}

	/*
		Chức năng: xóa Board có id là $boardId
		Author: user đã đăng nhập
	*/
	public function deleteBoard($boardId = null){
		//xóa các liên kết với ảnh của Board này
		$userImageBoards = $this->UserImageBoard->find('all',array('conditions'=>array('UserImageBoard.board_id'=>$boardId)));
		if($userImageBoards){
			foreach ($userImageBoards as $userImageBoard) {
				$this->UserImageBoard->delete($userImageBoard['UserImageBoard']['id']);
			}
		}
		//xoa cac lien ket follow voi board nay
		$userFollows = $this->UserFollow->find('all', array(
														'conditions'=>array(
															'UserFollow.board_id'=>$boardId)));
		if($userFollows){
			foreach($userFollows as $follow){
				$this->UserFollow->delete($follow['UserFollow']['id']);
			}
		}
		//xóa board
		if ($this->Board->delete($boardId)) {
        	$this->Session->setFlash(
            	__('Board id %s đã xóa.', h($boardId))
        	);
        	return $this->redirect(array('action' => 'viewInfoBoards'));
    	}
	}
	public function viewMyBoard($id){
		$boards = $this->Board->find('all',array('conditions'=>array('user_id'=>$this->Auth->user('id')),
											'order'=>array('Board.created DESC')));
		for($i=0; $i<count($boards); $i++){
			$userImageBoard = $this->UserImageBoard->find('all',array(
																	'conditions'=>array(
																					'UserImageBoard.board_id'=>$boards[$i]['Board']['id']),
																	'order'=>array('UserImageBoard.updated DESC')));
			$boards[$i]['ImageInBoard'] = $userImageBoard;
			/*boardAction =1,edit;2,follow;3,unfollow*/
			if($boards[$i]['Board']['user_id'] == $this->Auth->user('id')){
				$boards[$i]['boardAction'] = 1;
			}else
			if($this->UserFollow->find('all',array(
										'conditions'=>array(
											'UserFollow.user_id'=>$this->Auth->user('id'),
											'UserFollow.board_id'=>$boards[$i]['Board']['id'])
										))){
				$boards[$i]['boardAction'] = 3;
			}else{
				$boards[$i]['boardAction'] = 2;
			}

			/*lay profile user cua board*/
			$user = $this->Profile->findByUser_id($boards[$i]['Board']['user_id']);
			$boards[$i]['Profile'] = $user['Profile'];
		}
		
		$this->set('boards',$boards);
		

		$this->set('imageid',$id);
		
	}
	public function addExistImage($board_id,$id){
		
		if(!empty($this->data)&&$this->data['Board']['exist']!=null){

		$data=array('UserImageBoard'=>array(
											'user_id'=>$this->Auth->user('id'),
											'image_id'=>$id,
											'board_id'=>$board_id,
											'description'=>$this->data['Board']['exist']
											));
		
		$this->UserImageBoard->save($data);
		$this->set('board_id',$board_id);
		echo $this->redirect(array('action' => 'viewInfoBoard',$board_id));
		}
	}
}
?>